import { Context } from 'koa'

/**
 * @description: 定义统一的成功响应格式
 * @param {Context} ctx - Koa 上下文对象
 * @param {T} data - 成功返回的数据
 * @param {string} [msg='success'] - 成功返回的信息
 * @param {number} [code=0] - 成功返回的状态码
 * @return {void}
 */
function success<T = any>(
  ctx: Context,
  data: T,
  msg: string = 'success',
  code: number = 0
): void {
  if (!ctx || typeof ctx !== 'object' || !('body' in ctx)) {
    throw new Error('Invalid context object')
  }
  ctx.body = {
    code,
    msg,
    data
  }
}

/**
 * @description: 定义统一的失败响应格式
 * @param {Context} ctx - Koa 上下文对象
 * @param {string} [msg='error'] - 失败返回的信息
 * @param {R} [result=[]] - 失败返回的数据
 * @param {number} [status=400] - HTTP 状态码
 * @param {number} [code=1] - 失败返回的状态码
 * @return {void}
 */
function failResponse<R = any>(
  ctx: Context,
  msg: string = 'error',
  result: R = [] as R,
  status: number = 400,
  code: number = 1
): void {
  if (
    !ctx ||
    typeof ctx !== 'object' ||
    !('status' in ctx) ||
    !('body' in ctx)
  ) {
    throw new Error('Invalid context object')
  }
  ctx.status = status
  ctx.body = {
    code,
    msg,
    result
  }
}

export default { success, failResponse }
